मुझे अब दोहराव की समस्या है मुझे नहीं पता कि आगे किस तरह से मदद की ज़रूरत है मेरे पास यह मॉडल शाखा स्टॉक के विपरीत संबंध के साथ है

class Branch(models.Model):
    name = models.CharField(
        'Branch',
        unique=True,
        max_length=10,
        validators=[MinLengthValidator(5)])
    location = models.TextField(max_length=650,
        blank=True,
        help_text='location of the linsan branch')


    class Meta:
        verbose_name_plural = 'Branch'

    def __str__(self):
        return self.name 

class Stock(models.Model):
    branch          = models.ForeignKey(
        Branch,
        related_name = 'branch',
        help_text='Enter the name of the branch',
        on_delete=models.CASCADE,
        blank=False,
        null=False
        )

    manufacturers_name = models.CharField(
        max_length=50, 
        blank=True)

    description        = models.CharField(
        max_length=50,
        help_text='Enter the name of the product here',
        unique=True
        )

    model_number    = models.CharField(
        max_length=25,
        blank=True,
        null=True,
        help_text='Enter the model number of the item if any')

    color           = models.CharField(
        max_length=20,
        default='black',
        blank=True,
        null=True,)
    quantity        = models.PositiveIntegerField(
        validators=[validate],
        verbose_name='Quantity In stock')

    retail_price    = MoneyField(
        max_digits=14,
        decimal_places=2,
        default_currency='NGN',
        blank=False,
        verbose_name="Retail Price")

    customer_price  = MoneyField(
        max_digits=14,
        decimal_places=2,
        default_currency='NGN',
        blank=False)

    added = models.DateTimeField(
        auto_now_add=True, 
        help_text='The date the product was added')
    image           = models.ImageField(
        blank=True,
        null=True,
        upload_to='uploads/%Y/%m/%d/',
        help_text='Upload the image of the product if any')
    history = HistoricalRecords()
    class Meta:
        ordering = ['description']


    def __str__(self):
        return self.description

और एक विदेशी के साथ एक और मॉडलस्टॉक के लिए कुंजी

class WaybillItem(models.Model):
    waybill = models.ForeignKey(Waybill,
        on_delete=models.CASCADE,
        related_name='waybill_item')
    product = models.ForeignKey(
        'stock.Stock',
        on_delete=models.CASCADE,
        blank=False,
        null=False)
    quantity = models.PositiveIntegerField(validators=[validate, MinValueValidator(1)])

मेरे स्टॉक ऐप में मेरे पास एक संकेत है कि अगर मैं मौजूद नहीं हूं तो मैं दूसरी शाखा में नई स्टॉक ऑब्जेक्ट बनाना चाहता हूं।

def update_stock_on_waybill(sender, instance, **kwargs):
    transferred_to = instance.waybill.transferred_to.branch.all()
    product = instance.product

    if product in transferred_to:
        print("it is!")
        pass
    else:
        print("it isn't")
        Stock.objects.create(
            branch=instance.product.branch,
            description=instance.product.description,
            model_number=instance.product.model_number,
            color=instance.product.color,
            quantity=instance.quantity,
            retail_price=instance.product.retail_price,
            customer_price=instance.product.customer_price
            )
    product.save()

    pre_save.connect(update_stock_on_waybill, sender=WaybillItem)

लेकिन हर बार जब मैं एक नया वेबिल सहेजता हूं (** मैंने मॉडल को छोड़ दिया) जो अस्तित्व में नहीं है तो यह नई वस्तु बनाता है और जो ठीक है लेकिन ऑब्जेक्ट मौजूद होने पर भी लागू होता है, मैं पाइथन, डीजेंगो, प्रोग्रामिंग के लिए अपेक्षाकृत नया हूं सामान्य तौर पर मैंने अभी शुरू किया है, इसलिए सही दिशा में एक धक्का, एक धक्का, पॉइंटर्स अधिकतर आभारी होंगे मैं इस साइट को कुछ इसी तरह की खोज करना जारी रखूंगा, मेरा मानना ​​​​है कि किसी ने कुछ समान रूप से कुछ इसी तरह से ठोकर खाई होगी। सलाह में धन्यवाद

2
Martins 5 अक्टूबर 2018, 18:50

1 उत्तर

मैंने इसी तरह की स्थिति से थोड़ा अलग तरीके से निपटा। मैंने वस्तु निर्माण में मौजूदा वस्तुओं (वस्तु के पहचानकर्ता) का एक सेट जोड़ा। यदि नई वस्तु पहले से मौजूद है तो मैं कक्षा में init विफल हो जाता हूं।

class firstone:
    def __init__(self,name:str,chk:set):
        if name in chk:
            raise ValueError
        self.name = name
        chk.add(name)

    def get_name(self) -> str:
        return self.name

एक सेट बनाएं और पहली वस्तु को तुरंत चालू करें।

nmset=set()
a=firstone("a",nmset)

a.get_name()

रिटर्न 'ए'

nmset

केवल 'ए' युक्त रिटर्न सेट

b=firstone("a",nmset)

ValueError फेंकता है जिसे किसी भी तरह से संभाला जा सकता है ..

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-17-312c2fbf49eb> in <module>
----> 1 b=firstone("a",nmset)

<ipython-input-13-660b12b68b44> in __init__(self, name, chk)
      2     def __init__(self,name:str,chk:set):
      3         if name in chk:
----> 4             raise ValueError
      5         self.name = name
      6         chk.add(name)

ValueError: 

नकारात्मक पक्ष यह है कि सेट को पास करना पड़ता है, लेकिन मुझे यह एक आसान तरीका लगता है जब बहुत सारे स्थान होते हैं जिनसे वस्तुओं को तत्काल किया जा सकता है ...

0
Sachin Myneni 8 मई 2020, 18:24