2016-02-13 53 views
0

所以我有什么形式添加新对象的模型销售什么,从模型的好,计数(计数字段在模型好)id对象。编辑模型对象我形成?

我需要什么。当我在模型销售(ID和计数)中创建新对象时,更改模型中的计数好与模型销售ID。 so: 商品对象 - {id = 10 count = 5,id = 11,count = 3} 创建促销 - {d = 10 count = 3,id = 11,count = 2} 保存促销 更新好的对象{ID = 10计数= 2(5-3),ID = 11计数= 1(3-2)}从模型 更新产品良好 希望大家理解 视图

@login_required 
    def index(request): 
     if request.user.role == '2': 
      shop = Shop.objects.get(owner=request.user.parent) 
      goods = Good.objects.filter(shop=shop) 
      if request.method == 'POST': 
       form = SaleForm(request.POST) 
       form.fields['good'].queryset = goods 
       if form.is_valid(): 
        new_form = form.save(commit=False) 
        new_form.seller = request.user 
        new_form.save() 
      else: 
       form = SaleForm() 
       form.fields['good'].queryset = goods 

      return render(request, 'base_vendor.html', {'context': goods, 'form': form }) 

形式

from django import forms 
from core.models import Sale 


class SaleForm(forms.ModelForm): 

    class Meta: 
     model = Sale 
     fields = ('good', 'count') 

模板

<form method="POST" action="{%url 'vendor'%}"> 
    {% csrf_token %} 
{{form.as_p}} 
    <button type="submit">OK</button> 
</form> 

UPD

销售模式

class Sale(models.Model): 
     """ 
     Модель для проданих товарів 
     """ 
     good = models.ForeignKey(Good) 
     seller = models.ForeignKey(User) 
     time_selling = models.DateField(auto_now_add=True, editable=False) 
     count = models.PositiveSmallIntegerField(default=1) 

     class Meta: 
      verbose_name = 'Дані продажу' 
      verbose_name_plural = 'Таблиця продажів' 

好的模型

class Good(models.Model): 
    """ 
    Модель товарів 
    """ 
    # Налагтувати завантаження зобреження в окрему папку для кожного магазину 
    article = models.CharField('Артикул товару', max_length=100) 
    name = models.CharField('Назва товару', max_length=100) 
    shop = models.ForeignKey(Shop) 
    category = models.ForeignKey(Category, default=1) 
    image = models.ImageField(upload_to='media',blank=True) 
    price = models.DecimalField('Ціна', max_digits=10, decimal_places=2) 
    description = models.TextField('Описання товару', max_length=700, default='') 
    sale_price = models.DecimalField('Ціна розпродажу', max_digits=10, decimal_places=2, default=0) 
    producer = models.CharField('Виробник', max_length=100) 
    count = models.PositiveSmallIntegerField(default=1) 
    size = models.CharField(max_length=10, blank=True) 

    def __str__(self): 
     return self.name 

    class Meta: 
     verbose_name = 'товар' 
     verbose_name_plural = 'Товари' 

好形式

class GoodForm(forms.ModelForm): 
    article = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control1'})) 
    name = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control1'})) 
    description = forms.CharField(widget=forms.Textarea(attrs={'class': 'form-control1', 'rows': '30'})) 
    price = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control1'})) 
    sale_price = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control1'})) 
    producer = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control1'})) 
    count = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control1'})) 
    size = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control1'})) 
    image = forms.ImageField() 

    class Meta: 
     model = Good 
     fields = ('article', 'name', 'category', 'image', 'price', 'description', 'sale_price', 
        'producer', 'count', 'size') 

添加良好的看法。

@login_required 
def add_good(request): 
    if request.user.role == '1': 
     try: 
      have_shop = Shop.objects.get(owner=request.user.pk) 
      if have_shop: 
       if request.method == 'POST': 
        form = GoodForm(request.POST, request.FILES) 
        if form.is_valid(): 
         new_form = form.save(commit=False) 
         new_form.shop = Shop.objects.get(owner=request.user.pk) 
         new_form.save() 
         return HttpResponseRedirect('/dashboard/') 
       else: 
        form = GoodForm() 
        shop = Shop.objects.get(owner=request.user.pk) 
        categories = Category.objects.filter(parent=shop.category.pk) 
        form.fields['category'].queryset = categories 

       return render(request, 'add_good.html', {'form': form}) 
     except: 
      return HttpResponseRedirect('/dashboard/setup_shop') 
    else: 
     return HttpResponseRedirect('/') 

回答

0

因此,据我了解,好包含你有多少项目的计数。当您进行销售时,您希望从商品数量中减去该数字。

这其实并不难:

  1. new_form在你上面的例子实际上是一个销售对象,你可以重命名为销售。
  2. 我想用户已经从您提供给表单的商品列表中选择了商品。使用您的销售对象来获取用户选择的商品。
  3. 更新并保存数据库中的Good.count。

(奖金提示:您应该为此使用数据库事务,如果在保存销售时出现问题,您可能会收到不正确的好计数结果,以避免发生这种情况的错误)

+0

thx。我知道,但我不知道如何实现。我可以从form.is_valid()中获取良好的ID:(我尝试)good = Good.objects.get(pk = form.good.pk) 以及如何更新我的新对象“good” – user3170400

+0

如果没有你,这是不可能的也张贴您的模型和形式。 –

+0

更新问题 @emilStenström – user3170400