1

私は現在このモデルを持っていますが、会社のモデルを削除せずにロゴを削除するにはどうすればよいですか。可能であればコードをサンプルしてください。

class Picture(models.Model):
    owner = models.ForeignKey(User,blank = True)
    caption = models.CharField(max_length=150, blank=True, null=True)
    image = ImageField(upload_to='images/',blank = True, null = True)

class Company(GenericUser):
    company_name = models.CharField(max_length=150,blank = True,null = True)
    logo = models.ForeignKey(Picture,blank = True,null = True)

これはモデルです。次に、モデルがこのように見える土地モデルから写真を削除するにはどうすればよいですか。

class Land(Properies):
    photo = models.ManyToManyField(Picture,blank=True,related_name='Land_Pictures',null = True)

私はこのビットを試しましたが、うまくいきません

checked_list = []
start = 1            
land_photos = sorted(list(land.photo.select_related()),reverse =True)
while start < 8:
    photo = 'photo%s' % start
    checked = form.cleaned_data[photo]
    if checked != None:
        checked_list.append(land_photos[start - 1])
        start += 1            
for a_foto in checked_list:
land.photo.remove(a_foto)
try:
    a_foto.remove_all_file()
    a_foto.delete()
except OSError:
    pass

IDがnoneに設定されているなどのエラーが発生し続け、更新を押すと機能すると思います

Exception Type:     AssertionError
Exception Value:    
Picture object can't be deleted because its id attribute is set to None.
4

3 に答える 3

2

Company モデルを次のように変更します。

class Company(GenericUser):
    company_name = models.CharField(max_length=150,blank = True,null = True)
    logo = models.ForeignKey(Picture,blank = True,null = True, on_delete=models.SET_NULL)

ドキュメント: https://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.ForeignKey.on_delete

于 2012-11-05T10:35:51.413 に答える
1

Company オブジェクトから、削除する Picture オブジェクトへの参照をクリアする必要があります。

logo = company.logo
company.logo = None
logo.delete()

ただし、画像が複数の会社によって参照されている場合は、次のことを試してください。

logo = Picture.object.get(...) # the Picture you want to delete
logo.company_set.update(logo=None)
logo.delete()

関連するインスタンスがデフォルトで削除されないように、参照を Company から Image に変更することも検討する必要があります。

class Company(GenericUser):
    company_name = models.CharField(max_length=150,blank = True,null = True)
    logo = models.ForeignKey(Picture,blank = True,null = True, on_delete=models.SET_NULL)
于 2012-11-05T10:46:49.240 に答える
0

理由はありますか:

a)あなたは使用してい(GenericUser)ますか?これは間違いなくあなたに問題を引き起こします。

b) 属性を削除してからデータを移行することはできませんか?

class Picture(models.Model):
    owner = models.ForeignKey(User,blank = True)
    caption = models.CharField(max_length=150, blank=True, null=True)
    image = ImageField(upload_to='images/',blank = True, null = True)

class Company(models.Model):
    company_name = models.CharField(max_length=150, blank=True, null=True)
    logo = models.ForeignKey(Picture, blank=True, null=True)

または、ここで関連するインスタンスを削除しようとしています: https://docs.djangoproject.com/en/dev/ref/models/relations/#django.db.models.fields.related.RelatedManager.remove

その場合、使用しますremove()

于 2012-11-05T10:35:29.090 に答える